<?php

namespace app\admin\model\setting;

use think\Model;
use traits\model\SoftDelete;

class Setting extends Model
{
    use SoftDelete;

    // 表名,不含前缀
    protected $name = 'setting';
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'int';

    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';
    protected $deleteTime = 'deletetime';

    // 追加属性
    protected $append = [
        'extend_html',
        'language_Text',
    ];
    protected $type = [
        'setting' => 'json',
    ];

    /**
     * 读取配置类型
     * @return array
     */
    public static function getTypeList()
    {
        $typeList = [
            'string' => __( 'String' ),
            'text' => __( 'Text' ),
            'editor' => __( 'Editor' ),
            'number' => __( 'Number' ),
            'date' => __( 'Date' ),
            'time' => __( 'Time' ),
            'datetime' => __( 'Datetime' ),
            'datetimerange' => __( 'Datetimerange' ),
            'select' => __( 'Select' ),
            'selects' => __( 'Selects' ),
            'image' => __( 'Image' ),
            'images' => __( 'Images' ),
            'file' => __( 'File' ),
            'files' => __( 'Files' ),
            'switch' => __( 'Switch' ),
            'checkbox' => __( 'Checkbox' ),
            'radio' => __( 'Radio' ),
            'city' => __( 'City' ),
            'selectpage' => __( 'Selectpage' ),
            'selectpages' => __( 'Selectpages' ),
            'array' => __( 'Array' ),
            'custom' => __( 'Custom' ),
        ];
        return $typeList;
    }

    public function getLanguageList()
    {
        return ['1' => __('汉语'), '2' => __('维语')];
    }

    public function getLanguageTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['language']) ? $data['language'] : '');
        $list = $this->getLanguageList();
        return isset($list[$value]) ? $list[$value] : '';
    }

    public static function getRegexList()
    {
        $regexList = [
            'required' => '必选',
            'digits' => '数字',
            'letters' => '字母',
            'date' => '日期',
            'time' => '时间',
            'email' => '邮箱',
            'url' => '网址',
            'qq' => 'QQ号',
            'IDcard' => '身份证',
            'tel' => '座机电话',
            'mobile' => '手机号',
            'zipcode' => '邮编',
            'chinese' => '中文',
            'username' => '用户名',
            'password' => '密码'
        ];
        return $regexList;
    }

    public function getExtendHtmlAttr($value, $data)
    {
        $result = preg_replace_callback(
            "/\{([a-zA-Z]+)\}/",
            function ($matches) use ($data) {
                if (isset( $data[$matches[1]] )) {
                    return $data[$matches[1]];
                }
            },
            $data['extend']
        );
        return $result;
    }

    public static function getArrayData($data)
    {
        if (!isset( $data['value'] )) {
            $result = [];
            foreach ($data as $index => $datum) {
                $result['field'][$index] = $datum['key'];
                $result['value'][$index] = $datum['value'];
            }
            $data = $result;
        }
        $fieldarr = $valuearr = [];
        $field = isset( $data['field'] ) ? $data['field'] : (isset( $data['key'] ) ? $data['key'] : []);
        $value = isset( $data['value'] ) ? $data['value'] : [];
        foreach ($field as $m => $n) {
            if ($n != '') {
                $fieldarr[] = $field[$m];
                $valuearr[] = $value[$m];
            }
        }
        return $fieldarr ? array_combine( $fieldarr, $valuearr ) : [];
    }

    /**
     * 将字符串解析成键值数组
     * @param string $text
     * @return array
     */
    public static function decode($text, $split = "\r\n")
    {
        $content = explode( $split, $text );
        $arr = [];
        foreach ($content as $k => $v) {
            if (stripos( $v, "|" ) !== false) {
                $item = explode( '|', $v );
                $arr[$item[0]] = $item[1];
            }
        }
        return $arr;
    }

    /**
     * 将键值数组转换为字符串
     * @param array $array
     * @return string
     */
    public static function encode($array, $split = "\r\n")
    {
        $content = '';
        if ($array && is_array( $array )) {
            $arr = [];
            foreach ($array as $k => $v) {
                $arr[] = "{$k}|{$v}";
            }
            $content = implode( $split, $arr );
        }
        return $content;
    }

    /**
     * 本地上传配置信息
     * @return array
     */
    public static function upload()
    {
        $uploadcfg = config( 'upload' );

        $uploadurl = request()->module(
        ) ? $uploadcfg['uploadurl'] : ($uploadcfg['uploadurl'] === 'ajax/upload' ? 'index/' . $uploadcfg['uploadurl'] : $uploadcfg['uploadurl']);

        if (!preg_match( "/^((?:[a-z]+:)?\/\/)(.*)/i", $uploadurl ) && substr( $uploadurl, 0, 1 ) !== '/') {
            $uploadurl = url( $uploadurl, '', false );
        }

        $upload = [
            'cdnurl' => $uploadcfg['cdnurl'],
            'uploadurl' => $uploadurl,
            'bucket' => 'local',
            'maxsize' => $uploadcfg['maxsize'],
            'mimetype' => $uploadcfg['mimetype'],
            'chunking' => $uploadcfg['chunking'],
            'chunksize' => $uploadcfg['chunksize'],
            'savekey' => $uploadcfg['savekey'],
            'multipart' => [],
            'multiple' => $uploadcfg['multiple'],
            'storage' => 'local'
        ];
        return $upload;
    }

}